package se.stabby.undersok.model.inmemory;

import se.stabby.undersok.model.PågåendeUndersökning;
import se.stabby.undersok.model.PågåendeUndersökningId;
import se.stabby.undersok.model.Undersökning;
import se.stabby.undersok.model.UndersökningsId;
import se.stabby.undersok.repository.PågåendeUndersökningRepository;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;

/**
 * User: per.segersten
 * Date: 2014-05-25
 */
public class InMemoryPågåendeUndersökningRepository implements PågåendeUndersökningRepository {

    ConcurrentHashMap<PågåendeUndersökningId, PågåendeUndersökning> pågåendeUndersökningar = new ConcurrentHashMap<>();
    AtomicLong pågåendeUndersökningsId = new AtomicLong(1);


    @Override
    public PågåendeUndersökning skapa(Undersökning undersökning) {
        PågåendeUndersökning pågåendeUndersökning = new PågåendeUndersökning(new PågåendeUndersökningId(pågåendeUndersökningsId.getAndIncrement()),undersökning);
        pågåendeUndersökningar.put(pågåendeUndersökning.id, pågåendeUndersökning);
        return pågåendeUndersökning;
    }

    @Override
    public PågåendeUndersökning sök(PågåendeUndersökningId id) {
        return pågåendeUndersökningar.get(id);
    }

    @Override
    public void spara(PågåendeUndersökning uppdateradUndersökning) {
        if (!pågåendeUndersökningar.containsKey(uppdateradUndersökning.id)) {
            throw new IllegalStateException("Pågående undersökning saknas, PågåendeUndersökningId: " + uppdateradUndersökning.id);
        }
        pågåendeUndersökningar.put(uppdateradUndersökning.id, uppdateradUndersökning);
    }
}
